import shareApi from "@/api/shareApi";
import rxAjax from '@/assets/ajax.js';
import Api from '@/api/Api';
import Util from "@/js/Util";
import Dialog from "@/js/Dialog";

export default {
    data() {
        return {
            timer: 0
        }
    },
    methods: {
        /**
         * 使用参数对象打开表单方案.
         * @param {Object} obj 参数对象
         */
        openFormSolution({
            //表单方案别名
            alias,
            //标题
            title,
            //传递表单数据
            params={},
            //回调方法
            destroy,
            //主键
            pk="",
            readOnly=false,
            closeOnSave=true,
            openMode={isMax:true,isShade:true,width:800,height:600}}) {
            this.openForm(alias,title,readOnly,pk,params,destroy);
        },
        /**
         * 打开表单方案
         */
        openForm(alias, title, readonly, pk, params, destroy) {
            let paramsControl = {
                alias: alias,
                action: 'edit',
                pk: pk,
                title:title,
                jsonParams: params,
                appId:Util.getAppId(this)
            }
            if (readonly) {
                paramsControl.action = 'detail';
            }

            let conf = {
                data: {
                    isShowFormDialog: true,
                    paramsControl: paramsControl,
                },
                dialogOptions:{
                    title:title,
                    okText:''
                },
                curVm: this,
            };
            Dialog.openForm(conf, function (data) {
                if(destroy){
                    destroy(data.action, data.data);
                }
            })
        },


        /**
         * 调用自定义查询
         */
        invokeCustomQuery(key, params, callback) {
            Api.queryForJson(key, {params: JSON.stringify(params)}).then(res => {
                if (res.success && callback && typeof (callback) == 'function') {
                    callback(res.data);
                }
            });
        },
        /**
         * 调用自定义查询
         */
        invokeCustomQueryPromise(alias,params){
            return shareApi.queryForJson(alias, params);
        },
        /**
         * 调用服务端脚本。
         */
        invokeScript(alias, params, callback) {
            let url="/api-form/form/core/formInvokeScript/invoke/"+alias;
            return  rxAjax.postJson(url,params).then(res=>{
                if(callback) {
                    callback(res);
                }
            })
        },

        /**
         * 调用服务端脚本。
         */
        invokeScriptPromise(alias,params){
            let url="/api-form/form/core/formInvokeScript/invoke/"+alias;
            return  rxAjax.postJson(url,params);
        },
        /**
         * 发送post请求。
         */
        postJson(url, params) {
            return rxAjax.postJson(url, params);
        },

        /**
         * 发送get请求。
         */
        get(url) {
            return rxAjax.get(url);
        },
        /**
         * ajax
         * @returns {Request}
         */
        getAjax() {
            return rxAjax;
        },
        /**
         * 发送 post 请求。
         *  两种方式 ： 对象 {name:"RAY"} 传键值对 name=ray
         * @param url
         * @param params
         */
        postForm(url, params) {
            if(typeof params =="object"){
                let tmpAry=[];
                for(let key in params){
                    tmpAry.push(key +"=" + params[key]);
                }
                params=tmpAry.join("&");
            }
            return rxAjax.post(url, params);
        },
        /**
         * 延迟执行。
         * @param callBack
         * @param timeout
         */
        delay(callBack,timeout){
            if(this.timer){
                window.clearTimeout(this.timer);
                this.timer=0;
            }
            this.timer=window.setTimeout(callBack,timeout);
        },
        /**
         * 调用接口。
         * @param apiKey
         * @param params
         * @param callback
         */
        invokeInterface(apiKey,params,callback){
            shareApi.formBoListInterface(apiKey,params).then(res=>{
                if(callback){
                    callback(res);
                }
            })
        }
    }
}
